System V セマフォ
ヘッダはsys/sem.hを使う
名前なしセマフォ (メモリベース・セマフォ)
System V セマフォの概観は「svipc」のmanがおすすめ
$ ipcs -s
$ ipcpm -s 52
semget()
semop()
semtimedop()
semctl()
code:semaphore.c
// セマフォの初期化またはセマフォへのアクセス
int semget(key_t key , int nsems , int semflg );
// セマフォの操作
int semop(int semid, struct sembuf *sops, size_t nsops);
int semtimedop(int semid, struct sembuf *sops, size_t nsops,
const struct timespec *timeout);
// セマフォ集合のアクセス権やその他の変更をする
int semctl(int semid, int semnum, int cmd, ...);
IPC_CREAT
キー(key)が存在しない場合には新たなエントリを作成する。
IPC_EXCL
キー(key)が存在する場合には失敗する。
IPC_NOWAIT
要求が待たされる場合にはエラーになる。
code:semaphore.c
int main() {
// セマフォID?
key_t key = 1000;
// セマフォ配列内の要素数
int nsems = 1;
// セマフォのフラグ
int semflg = IPC_CREAT;
int semid;
if ((semid = semget(key, nsems, semflg)) == -1) {
perror("semget: semget failed");
exit(1);
} else
exit(0);
}
関連
確認用
Q. Sysmem V セマフォ
Q. セマフォの作成
Q. セマフォの削除
参考
メモ